using System;
using System.Collections.Generic;
using System.Linq;
using KPIS.GERP.SERVICE.Model;

namespace KPIS.GERP.SERVICE.DAL
{
    public static class ApprovalStorageDb
    {
        public static Dictionary<Guid, approval_task> Tasks = new Dictionary<Guid, approval_task>();

        public static int AddTask(approval_task pApprovalTask)
        {
            return new ApprovalTaskDal().InsertApprovalTask(pApprovalTask).ApprovalTaskSeq;
        }

        public static void UpdateTask(approval_task pApprovalTask)
        {
            new ApprovalTaskDal().UpdateApprovalTask(pApprovalTask);
        }

        public static void UpdateApprovalTaskHistory(int? approval_task_seq, int? emp_seq, string status_on_this_step, string status_on_priv_step, 
            string remarks, string message_title, string message_reasons, List<int> messages_seq, string action)
        {
            new ApprovalTaskDal().UpdateApprovalTaskHistory(approval_task_seq, emp_seq, status_on_this_step, status_on_priv_step,
                                                            remarks, message_title, message_reasons, messages_seq, action);
        }
        
        public static void UpdateOrAddIfNotExistApprovalTask(approval_task pApprovalTask)
        {
            new ApprovalTaskDal().UpdateOrAddIfNotExistApprovalTask(pApprovalTask);
        }

        public static void RemoveTask(int approvalTaskSeq)
        {
            new ApprovalTaskDal().DeleteApprovalTask(approvalTaskSeq);
        }

        public static void SetStatusTask(int approvalTaskSeq, TaskStatus pTaskStatus)
        {
            new ApprovalTaskDal().UpdateApprovalTaskStatus(approvalTaskSeq, null, pTaskStatus);
        }

        public static Dictionary<Guid, approval_task> ToDict()
        {
            List<approval_task> datas = new ApprovalTaskDal().GetApprovalTask(new approval_task());

            return datas.ToDictionary(data => data.WfInstantId);
        }

        public static List<approval_task> ToList()
        {
            return new ApprovalTaskDal().GetApprovalTask(new approval_task());
        }

        public static approval_task GetTask(int approvalTaskSeq)
        {
            var result = new ApprovalTaskDal().GetApprovalTask(new approval_task { ApprovalTaskSeq = approvalTaskSeq });
            return result.Count > 0 ? result[0] : null;
        }
    }
}